// ? Element 常用表单校验规则

/**
 *  @rule 手机号
 */
export function checkPhoneNumber(rule: any, value: any, callback: any) {
  const regexp = /^(((13[0-9]{1})|(15[0-9]{1})|(16[0-9]{1})|(17[3-8]{1})|(18[0-9]{1})|(19[0-9]{1})|(14[5-7]{1}))+\d{8})$/;
  if (value === "") callback("请输入手机号码");
  if (!regexp.test(value)) {
    callback(new Error("请输入正确的手机号码"));
  } else {
    return callback();
  }
}

/**
 * @rule 手机号
 * @description 10位或以上密码
 * @description 字符（-@#$%&*^+=!）
 * @description 数字（0123456789）
 * @description 小写字母（a-z）
 * @description 大写字母（A-Z）
 * @description 除去（重复三个字母，数字）
 * @description 除去（连续数字四个）
 */

export function validatePassword(rule, value, callback) {
  if (!value) {
    callback(new Error("密码不能为空。"));
  }

  // 检查是否包含至少一个特殊字符（-@#$%&*+=!）
  if (!/[-@#$%&*^+=!]/.test(value)) {
    callback(new Error("密码必须包含至少一个特殊字符（-@#$%&*^+=!）。"));
  }

  // 检查密码中是否包含连续数字（例如 1234）
  if (/(1234|2345|3456|4567|5678|6789)/.test(value)) {
    callback(new Error("密码不能包含连续的数字（如 1234）。"));
  }

  // 检查密码中是否包含连续的相同数字（如 111, 222）
  if (/(\d)\1{2,}/.test(value)) {
    callback(new Error("密码不能包含连续的相同数字（如 111, 222）。"));
  }

  // 检查密码中是否包含连续的相同字母（如 aaa, bbb）
  if (/([a-zA-Z])\1{2,}/.test(value)) {
    callback(new Error("密码不能包含连续的相同字母（如 aaa, bbb）。"));
  }

  // 检查密码长度是否为 10 位或以上
  if (value.length < 10) {
    callback(new Error("密码长度必须为 10 位或以上。"));
  }

  // 检查是否包含至少一个数字（0-9）
  if (!/[0-9]/.test(value)) {
    callback(new Error("密码必须包含至少一个数字。"));
  }

  // 检查是否包含至少一个小写字母（a-z）
  if (!/[a-z]/.test(value)) {
    callback(new Error("密码必须包含至少一个小写字母。"));
  }

  // 检查是否包含至少一个大写字母（A-Z）
  if (!/[A-Z]/.test(value)) {
    callback(new Error("密码必须包含至少一个大写字母。"));
  }

  // 如果没有错误，返回有效信息
  return callback();
}
